# encoding=utf8
from os import system
import json,urllib3,datetime,re
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def join_str(sth):
    '''用jion去除字符串中多余的符号，为了方便封装为模块，以字符串作为传入参数即可'''
    str = ''.join(sth).strip()
    return str

def downtext(url,*page):
    '''爬取html界面数据并返回文本内容'''
    headers = {
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36 Edg/103.0.1264.37',
        'Cookie':'JSESSIONID=7e08860b-d58f-47c6-aa63-da76db49b2c6; gr_user_id=ba7ec484-099c-4410-8913-808ff4c47b89; a92bf18a95cb2b3c_gr_session_id=a7e4f8cc-ddb9-4b4b-9679-a662252fc842; a92bf18a95cb2b3c_gr_session_id_a7e4f8cc-ddb9-4b4b-9679-a662252fc842=true; Hm_lvt_3dd500c95a0505fd002b19136f7a4543=1656425176; Hm_lpvt_3dd500c95a0505fd002b19136f7a4543=1656425746',
    }
    res = requests.get(url=url,headers=headers,params=params).text
    return res

def downjson(url,*page):
    '''爬取Ajax数据并返回json内容'''

    headers = {
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36 Edg/103.0.1264.37',
        'Cookie':'JSESSIONID=7e08860b-d58f-47c6-aa63-da76db49b2c6; gr_user_id=ba7ec484-099c-4410-8913-808ff4c47b89; a92bf18a95cb2b3c_gr_session_id=a7e4f8cc-ddb9-4b4b-9679-a662252fc842; a92bf18a95cb2b3c_gr_session_id_a7e4f8cc-ddb9-4b4b-9679-a662252fc842=true; Hm_lvt_3dd500c95a0505fd002b19136f7a4543=1656425176; Hm_lpvt_3dd500c95a0505fd002b19136f7a4543=1656425746',
    }

    res = requests.get(url=url,headers=headers,params=params).json()

    return res

#TODO 备用
def func1(res):
    '''备用    func函数需要嵌套时使用这个分出来'''
    return 0

def func(res):
    '''主要运行函数，用来数据解析，其他函数传参用，主要在这里运行'''

    #正则表达式匹配到var phone内容并进行切片处理，留下{}中内容作为列表元素并进行遍历
    for i in  re.findall('(?<=var phones =).*',res)[0][1:-2].replace('},','}cncncnm').split('cncncnm'):
        i = json.loads(i)  #把{}中的内容转换为字典格式，方便利用键值对获取数据
        # print(type(i))
        print(i['name'],'-',i['version'],'-',i['pic'])   #i['name']  获取字典中键为name的值

#TODO 使用xpath无法解析出script中的内容，想要获取键值对信息可以使用   ('(?<=头文本)获取内容(?=尾文本)',文本内容)   进行获取，
#TODO 不过由于需要遍历每一类的值并进行拼接，相对来说比较繁琐便弃用此方案，采用上面先把文本转换为字典后索引数值方式。
#//*[@id="wp"]/script[2]/text()
    # print(res)
    # with open('./miui.html','w',encoding='utf-8') as fp :
    #     fp.write(res)
    # print(var)
    # name = re.findall('(?<="name":").*?(?=","hot)',res) #正则表达式匹配name
    # version = re.findall('(?<="version":").*?(?=","hot)',res)

    # phone_list = phone_list[1:-2].replace('},','}cncncnm').split('cncncnm')cncncnm
    # phone_list = phone_list.replace('},','}cncncnm')
    # phone_list = phone_list.split('cncncnm')
    # for i in phone_list:

    # print(type(phone_list))
    # for phone in phone_list:
    #     for i in phone:

    #     name = phone['name']
    #     print(name)
    #         print(i,end='\n厉害')
    # print(phone_list)
        # print(type(var))
        # break
    # tree = etree.HTML(res)
    # var = tree.xpath('//*[@id="wp"]/script[2]/text()')
    # print(var)
    # return 0
if __name__ == "__main__":  #主函数
    system('pip install requests')  #向控制台发送pip指令安装第三方requests库。
    system('pip install pymysql')
    import requests  #引用第三方库
    url = 'https://www.miui.com/download-375.html'   #输入url后传参给downtext或者downjson函数
    # print(url)
    res = downtext(url)
    # print(res)
    func(res)  #获取数据并进行解析
    # break

